From 1943191f67703b7fe41838cd2b40e061cfab8541 Mon Sep 17 00:00:00 2001 From: "kfraser@localhost.localdomain" Date: Tue, 17 Oct 2006 18:50:08 +0100 Subject: [PATCH] Define REX64_PREFIX to account for assembler syntax differences on SVR4 targets. Signed-off-by: John Levon --- xen/arch/x86/i387.c | 9 +++++---- xen/include/asm-x86/x86_64/asm_defns.h | 6 ++++++ 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/xen/arch/x86/i387.c b/xen/arch/x86/i387.c index ebfc37fa7b..899f80da3b 100644 --- a/xen/arch/x86/i387.c +++ b/xen/arch/x86/i387.c @@ -14,6 +14,7 @@ #include #include #include +#include void init_fpu(void) { @@ -41,11 +42,11 @@ void save_init_fpu(struct vcpu *v) #else /* __x86_64__ */ /* * The only way to force fxsaveq on a wide range of gas versions. On - * older versions the rex64 prefix works only if we force an addressing - * mode that doesn't require extended registers. + * older versions the rex64 prefix works only if we force an + * addressing mode that doesn't require extended registers. */ __asm__ __volatile__ ( - "rex64/fxsave (%1)" + REX64_PREFIX "fxsave (%1)" : "=m" (*fpu_ctxt) : "cdaSDb" (fpu_ctxt) ); #endif @@ -95,7 +96,7 @@ void restore_fpu(struct vcpu *v) "1: fxrstor %0 \n" #else /* __x86_64__ */ /* See above for why the operands/constraints are this way. */ - "1: rex64/fxrstor (%2) \n" + "1: " REX64_PREFIX "fxrstor (%2)\n" #endif ".section .fixup,\"ax\" \n" "2: push %%"__OP"ax \n" diff --git a/xen/include/asm-x86/x86_64/asm_defns.h b/xen/include/asm-x86/x86_64/asm_defns.h index 699e81b4f0..05f708adaf 100644 --- a/xen/include/asm-x86/x86_64/asm_defns.h +++ b/xen/include/asm-x86/x86_64/asm_defns.h @@ -60,6 +60,12 @@ #define safe_swapgs \ "mfence; swapgs;" +#ifdef __sun__ +#define REX64_PREFIX "rex64\\" +#else +#define REX64_PREFIX "rex64/" +#endif + #define BUILD_SMP_INTERRUPT(x,v) XBUILD_SMP_INTERRUPT(x,v) #define XBUILD_SMP_INTERRUPT(x,v) \ asmlinkage void x(void); \ -- 2.30.2